package com.xjh.basestudy.lanqiaobei;

/**
 * 递归和for循环通常可以相互转换
 */
public class Recursion {
    public static void main(String[] args) {
        System.out.println(factorial(3)); // 输出6
    }

    /**
     * 递归阶乘
     *
     步骤	当前调用栈	执行状态	返回值流向
     1	factorial(3)	执行3 * factorial(2)	等待下层结果
     2	→ factorial(2)	执行2 * factorial(1)	等待下层结果
     3	→ → factorial(1)	执行1 * factorial(0)	等待下层结果
     4	→ → → factorial(0)	触发基线条件 return 1	向上返回1
     5	→ → factorial(1)	计算1 * 1 = 1	向上返回1
     6	→ factorial(2)	计算2 * 1 = 2	向上返回2
     7	factorial(3)	计算3 * 2 = 6	最终结果返回main

     */
    public static int factorial(int n) {
        // 基线条件（递归终止条件）
        if (n == 0) {
            return 1;
        }
        // 递归步骤
        else {
            return n * factorial(n - 1);
        }
    }


}
